package model;

import java.util.LinkedHashMap;

import br.com.site.R;

import com.google.android.maps.GeoPoint;

public class Estrutura extends PDI {

	int icone = R.drawable.casa_icon;
	private int tipo = 2;
	private Equipe equipe;
	private Perigo perigo;
	private Vitima vitima;
	private String identificacao, tipoDeEstrutura, tipoDeMaterial, tipoDeSubsolo, estadoDaRevisao, instabilidade;
	private String tamanhoDoAcesso, dificuldadeDeEntrada, evolucaoDoTrabalho;
	private int afluenciaPublico, numAndares, numSubsolos, tempoAcesso, qtdPessoasPiso, resistenciaPiso;
	
	public Estrutura(String Latitude, String Longitude, String Titulo,	String Texto,
			Equipe equipe, Perigo perigo, Vitima vitima,
			String identificacao, String tipoDeEstrutura, int afluenciaPublico, int estadoDaRevisao, int instabilidade,
			String tipoDeMaterial, String tamanhoDoAcesso, int dificuldadeDeEntrada,
			int numAndares, int numSubsolos, String tipoDeSubsolo, int evolucaoDoTrabalho,
			int qtdPessoasPiso, int resistenciaPiso, int tempoEstimadoAcesso) {
		super(Latitude, Longitude, Titulo, Texto);
		this.setAtributos(equipe, perigo, vitima, identificacao, tipoDeEstrutura, afluenciaPublico, estadoDaRevisao, instabilidade, tipoDeMaterial, tamanhoDoAcesso, dificuldadeDeEntrada, numAndares, numSubsolos, tipoDeSubsolo, evolucaoDoTrabalho, qtdPessoasPiso, resistenciaPiso, tempoEstimadoAcesso);
	}
	
	public Estrutura(GeoPoint p, String Titulo,
			String Texto, Equipe equipe, Perigo perigo, Vitima vitima,
			String identificacao, String tipoDeEstrutura, int afluenciaPublico, int estadoDaRevisao, int instabilidade,
			String tipoDeMaterial, String tamanhoDoAcesso, int dificuldadeDeEntrada,
			int numAndares, int numSubsolos, String tipoDeSubsolo, int evolucaoDoTrabalho,
			int qtdPessoasPiso, int resistenciaPiso, int tempoEstimadoAcesso) {
		super(p, Titulo, Texto);
		this.setAtributos(equipe, perigo, vitima, identificacao, tipoDeEstrutura, afluenciaPublico, estadoDaRevisao, instabilidade, tipoDeMaterial, tamanhoDoAcesso, dificuldadeDeEntrada, numAndares, numSubsolos, tipoDeSubsolo, evolucaoDoTrabalho, qtdPessoasPiso, resistenciaPiso, tempoEstimadoAcesso);
	}
	
	private void setAtributos(Equipe equipe, Perigo perigo, Vitima vitima,
			String identificacao, String tipoDeEstrutura, int afluenciaPublico, int estadoDaRevisao, int instabilidade,
			String tipoDeMaterial, String tamanhoDoAcesso, int dificuldadeDeEntrada,
			int numAndares, int numSubsolos, String tipoDeSubsolo, int evolucaoDoTrabalho,
			int qtdPessoasPiso, int resistenciaPiso, int tempoEstimadoAcesso){
		this.equipe = equipe;
		this.perigo = perigo;
		this.vitima = vitima;
		this.identificacao = identificacao;
		this.tipoDeEstrutura = tipoDeEstrutura;
		this.tipoDeMaterial = tipoDeMaterial;
		this.tipoDeSubsolo = tipoDeSubsolo;
		this.afluenciaPublico = afluenciaPublico;
		this.numAndares = numAndares;
		this.numSubsolos = numSubsolos;
		this.qtdPessoasPiso = qtdPessoasPiso;
		this.resistenciaPiso = resistenciaPiso;
		this.tempoAcesso = tempoEstimadoAcesso;
		this.tipoDeSubsolo = tipoDeSubsolo;
		this.tamanhoDoAcesso = tamanhoDoAcesso;
		
		switch(estadoDaRevisao){
		case 1: this.estadoDaRevisao = "Não revisado"; break;
		case 2: this.estadoDaRevisao = "Em revisão"; break;
		case 3: this.estadoDaRevisao = "Revisado"; break;
		default: this.estadoDaRevisao = "Desconhecido"; break;
		}
		
		switch(instabilidade){
		case 1: this.instabilidade = "Estável"; break;
		case 2: this.instabilidade = "Instável"; break;
		case 3: this.instabilidade = "Completamente Instável"; break;
		default: this.instabilidade = "Desconhecido"; break;
		}
		
		switch(dificuldadeDeEntrada){
		case 1: this.dificuldadeDeEntrada = "Leve"; break;
		case 2: this.dificuldadeDeEntrada = "Média"; break;
		case 3: this.dificuldadeDeEntrada = "Difícil"; break;
		case 4: this.dificuldadeDeEntrada = "Muito Difícil"; break;
		default: this.dificuldadeDeEntrada = "Desconhecido"; break;
		}
		
		switch(evolucaoDoTrabalho){
		case 1: this.evolucaoDoTrabalho = "Não começou"; break;
		case 2: this.evolucaoDoTrabalho = "Em andamento"; break;
		case 3: this.evolucaoDoTrabalho = "Finalizado"; break;
		case 4: this.evolucaoDoTrabalho = "Em pausa"; break;
		default: this.evolucaoDoTrabalho = "Desconhecido"; break;
		}
		
		this.atualizaTextoBalao();
	}
	
	public void atualizaTextoBalao(){
		String textoBalao = "";
    	if (this.getTipoDeMaterial().equals("")){
    		textoBalao += "Estado da busca: " + this.getEstadoDaBusca() + "\n" + this.getInstabilidade();
    	}else{
    		textoBalao += this.getTipoDeMaterial() + ", Estado da busca: " + this.getEstadoDaBusca() + "\n" + this.getInstabilidade();
    	}
    	if (equipe != null){
    		textoBalao += "\nEquipe: " + equipe.toString();
    	}
		if (perigo != null){
			textoBalao += "\nPerigo: " + perigo.toString();
		}
		if (vitima != null){
			textoBalao += "\nVítima: " + vitima.toString();
		}
		
		this.setTextoBalao(textoBalao);
	}

	public String getEvolucaoDoTrabalho() {
		return evolucaoDoTrabalho;
	}

	public void setEvolucaoDoTrabalho(int evolucaoDoTrabalho) {
		switch(evolucaoDoTrabalho){
		case 1: this.evolucaoDoTrabalho = "Não começou"; break;
		case 2: this.evolucaoDoTrabalho = "Em andamento"; break;
		case 3: this.evolucaoDoTrabalho = "Finalizado"; break;
		case 4: this.evolucaoDoTrabalho = "Em pausa"; break;
		default: this.evolucaoDoTrabalho = "Desconhecido"; break;
		}
	}

	public String getTipoDeEstrutura() {
		return tipoDeEstrutura;
	}

	public void setTipoDeEstrutura(String tipoDeEstrutura) {
		this.tipoDeEstrutura = tipoDeEstrutura;
	}

	public String getTipoDeMaterial() {
		return tipoDeMaterial;
	}

	public void setTipoDeMaterial(String tipoDeMaterial) {
		this.tipoDeMaterial = tipoDeMaterial;
	}
	
	public String getIdentificacao() {
		return identificacao;
	}

	public void setIdentificacao(String identificacao) {
		this.identificacao = identificacao;
		super.setTituloBalao(identificacao);
	}

	public String getTipoDeSubsolo() {
		return tipoDeSubsolo;
	}

	public void setTipoDeSubsolo(String tipoDeSubsolo) {
		this.tipoDeSubsolo = tipoDeSubsolo;
	}

	public String getTamanhoDoAcesso() {
		return tamanhoDoAcesso;
	}

	public void setTamanhoDoAcesso(String tamanhoDoAcesso) {
		this.tamanhoDoAcesso = tamanhoDoAcesso;
	}

	public int getAfluenciaPublico() {
		return afluenciaPublico;
	}

	public void setAfluenciaPublico(int afluenciaPublico) {
		this.afluenciaPublico = afluenciaPublico;
	}

	public int getNumAndares() {
		return numAndares;
	}

	public void setNumAndares(int numAndares) {
		this.numAndares = numAndares;
	}

	public int getNumSubsolos() {
		return numSubsolos;
	}

	public void setNumSubsolos(int numSubsolos) {
		this.numSubsolos = numSubsolos;
	}

	public int getTempoAcesso() {
		return tempoAcesso;
	}

	public void setTempoAcesso(int tempoAcesso) {
		this.tempoAcesso = tempoAcesso;
	}

	public int getQtdPessoasPiso() {
		return qtdPessoasPiso;
	}

	public void setQtdPessoasPiso(int qtdPessoasPiso) {
		this.qtdPessoasPiso = qtdPessoasPiso;
	}

	public int getResistenciaPiso() {
		return resistenciaPiso;
	}

	public void setResistenciaPiso(int resistenciaPiso) {
		this.resistenciaPiso = resistenciaPiso;
	}

	public String getDificuldadeDeEntrada() {
		return dificuldadeDeEntrada;
	}

	public void setDificuldadeDeEntrada(int dificuldadeDeEntrada) {
		switch(dificuldadeDeEntrada){
		case 1: this.dificuldadeDeEntrada = "Leve"; break;
		case 2: this.dificuldadeDeEntrada = "Média"; break;
		case 3: this.dificuldadeDeEntrada = "Difícil"; break;
		case 4: this.dificuldadeDeEntrada = "Muito Difícil"; break;
		default: this.dificuldadeDeEntrada = "Desconhecido"; break;
		}
	}

	public String getInstabilidade() {
		return instabilidade;
	}

	public void setInstabilidade(int instabilidade) {
		switch(instabilidade){
		case 1: this.instabilidade = "Estável"; break;
		case 2: this.instabilidade = "Instável"; break;
		case 3: this.instabilidade = "Completamente Instável"; break;
		default: this.instabilidade = "Desconhecido"; break;
		}
	}

	public String getEstadoDaBusca() {
		return estadoDaRevisao;
	}

	public void setEstadoDaRevisao(int estadoDaRevisao) {
		switch(estadoDaRevisao){
		case 1: this.estadoDaRevisao = "Não revisado"; break;
		case 2: this.estadoDaRevisao = "Em revisão"; break;
		case 3: this.estadoDaRevisao = "Revisado"; break;
		default: this.estadoDaRevisao = "Desconhecido"; break;
		}
	}

	public int getIcone() {
		return icone;
	}
	
	public Equipe getEquipe() {
		return equipe;
	}


	public Perigo getPerigo() {
		return perigo;
	}


	public Vitima getVitima() {
		return vitima;
	}


	@Override
	public String toString() {
		String str = tipoDeEstrutura;
		if(!instabilidade.equals("Desconhecido") || !instabilidade.equals("") || !instabilidade.equals(null)){
			str += ", " + instabilidade;
		}
		return str;
	}

	public void setEquipe(Equipe equipe) {
		this.equipe = equipe;
	}

	public void setPerigo(Perigo perigo) {
		this.perigo = perigo;
	}

	public void setVitima(Vitima vitima) {
		this.vitima = vitima;
	}
	
	@Override
	public int getTipo(){
		return tipo;
	}
	
	public String getXML(){		
		LinkedHashMap<String, String> mapa = new LinkedHashMap<String, String>();
		mapa.put("identificacao", this.getIdentificacao());
		mapa.put("tipoDeEstrutura", this.getTipoDeEstrutura());
		mapa.put("afluenciaDePublico", String.valueOf(this.getAfluenciaPublico()));
		mapa.put("estadoDaRevisao", this.getEstadoDaBusca());
		mapa.put("instabilidade", this.getInstabilidade());
		mapa.put("tipoDeMaterial", this.getTipoDeMaterial());
		mapa.put("tamanhoDoAcesso", this.getTamanhoDoAcesso());
		mapa.put("dificuldadeDeEntrada", this.getDificuldadeDeEntrada());
		mapa.put("numAndares", String.valueOf(this.getNumAndares()));
		mapa.put("numSubsolos", String.valueOf(this.getNumSubsolos()));
		mapa.put("tipoDeSubsolo", this.getTipoDeSubsolo());
		mapa.put("evolucaoDoTrabalho", this.getEvolucaoDoTrabalho());
		mapa.put("qtdPessoasPiso", String.valueOf(this.getQtdPessoasPiso()));
		mapa.put("resistenciaPiso", String.valueOf(this.getResistenciaPiso()));
		mapa.put("tempoEstimadoAcesso", String.valueOf(this.getTempoAcesso()));
		
		return super.getXML("estrutura", mapa);
	}
	
	
}
